﻿/**
 * @file guild_service_auth_context.h
 * @date 2021/06/18 09:06
 * 
 * @author harrybao (harrybao@123u.com)
 * 
 * @brief 公会认证服务上下文
 * 
 * @version v1.0.0
 * 
 * @copyright Copyright © 2021 All Rights Reserved 上海欢乐互娱网络科技有限公司
 * 
 * @par history:
 * <table>
 * <tr><th>Date                     <th>Version     <th>Author      <th>Description
 * <tr><td>2021/06/18 09:06         <td>1.0.0       <td>harrybao    <td>创建初始版本
 * <tr><td>2021/07/21 14:25         <td>1.0.1       <td>harrybao    <td>优化注册方法
 * </table>
 */

#pragma once

#include <memory>
#include "rpc_defines.h"

struct RegisterArg;
struct RegisterRes;
struct UnregisterNtfData;

namespace kratos {
namespace service {
class ServiceContext;
}
}  // namespace kratos

namespace guild_service {

/**
 * @brief 公会认证服务上下文类
 *
 */
class GuildServiceAuthContext {
  GuildServiceAuthContext() = delete;
  GuildServiceAuthContext(const GuildServiceAuthContext &) = delete;
  GuildServiceAuthContext(GuildServiceAuthContext &&) = delete;
  const GuildServiceAuthContext &operator=(const GuildServiceAuthContext &) =
      delete;
  const GuildServiceAuthContext &operator=(GuildServiceAuthContext &&) =
      delete;

 public:
  /**
   * @brief 启动
   *
   * @param context 服务上下文
   * @return true 启动成功
   * @return false 启动失败
   */
  static bool Start(kratos::service::ServiceContext *context);

  /**
   * @brief 关闭
   *
   * @return true 关闭成功
   * @return false 关闭失败
   */
  static bool Stop();

  /**
   * @brief 初始化
   * @param context
   * @return 执行结果
   */
  static bool Init(kratos::service::ServiceContext *context);

  /**
   * @brief 未初始化
   * @return 执行结果
   */
  static bool Uninit();

  /**
   * @brief 更新
   *
   * @param ms 间隔（单位 毫秒 ）
   */
  static void Tick(time_t ms);

  /**
   * @brief 注册
   *
   * @param arg 注册参数
   * @param res 注册返回
   */
  static void Register(rpc::StubCallPtr call, const RegisterArg &arg,
                       const std::shared_ptr<RegisterRes> &res);

  /**
   * @brief 注销
   * 
   * @param data 注销参数
   */
  static void Unregister(const UnregisterNtfData &data);
};

}  // namespace guild_service
